Technical Q&A QA1289
How to remove the "Open Recent" menu item in a Document-based Cocoa application


Q: ドキュメントベースの Cocoa アプリケーションで「最近使った書類」メニュー項目を削除するにはどうすればよいのでしょうか。

A: デベロッパによっては、ドキュメントベースの Cocoa アプリケーションの「ファイル」メニューから「最近使った書類」メニュー項目を恒久的に取り除きたいことがあります。しかし、このメニュー項目を Interface Builder の nib から削除するだけでは不十分です。というのも、NSDocumentController によってメニュー項目の有無が確認され、起動時にその項目が再挿入されるからです。メニュー項目を恒久的に取り除くには、代わりに、実行時の NSDocumentController によるメニュー項目の追加の後で、メニュー項目を削除する必要があります。メニュー項目の削除を行う最適な場所は、アプリケーションの委任メソッド -applicationDidFinishLaunching: の中です。削除の方法についてはリスト 1 のコードを参照してください。なお、アップルの Aqua Interface Guidelines では、「最近使った書類」メニュー項目を残すことを勧めています。


[2003 年 9 月 15 日]



リスト 1. 「最近使った書類」メニュー項目の削除

// fileMenu はアプリケーションの「ファイル」メニューに対して作成するアウトレット
int openDocumentMenuItemIndex = [fileMenu indexOfItemWithTarget:nil
andAction:@selector(openDocument:)];

if (openDocumentMenuItemIndex>=0 &&

[[fileMenu itemAtIndex:openDocumentMenuItemIndex+1] hasSubmenu])
    {
// これを「最近使った書類」メニュー項目とみなす。なぜなら、これは、
// NSDocumentController が「最近使った書類」メニュー項目を「ファイル」
// メニューに追加するために使用するヒューリスティックスだからである
[fileMenu removeItemAtIndex:openDocumentMenuItemIndex+1];
    }